import re
import tkinter as tk
from datetime import datetime
from tkinter import messagebox, ttk
from RwConfig import *


class setingPage(tk.Frame):
    def __init__(self, root):
        super().__init__(root)
        # 设置全局背景色为白色（可选，如果用了多个 Frame 可再统一设置）
        self.bg_color = 'lightgray'
        # 获取参数配置
        self.get_config()
        # 布局窗口
        self.create_page()
        # 窗口填充默认值
        self.on_reset_btn()

    def get_config(self):
        configname = 'config/config.ini'
        # 初始化配置文件
        self.RwConfig = RwConfig(configname)
        # 获取配置文件信息
        self.citycode = self.RwConfig.Get_Config('info', 'citycode')
        self.cityname = self.RwConfig.Get_Config('info', 'cityname')
        # name = self.RwConfig.Get_Config('connect', 'username')
        self.pa = self.RwConfig.Get_Config('connect', 'password')
        self.check_sfz = self.RwConfig.Get_Config_Int('checklist', 'sfz')
        self.check_name = self.RwConfig.Get_Config_Int('checklist', 'name')
        self.check_ratio = self.RwConfig.Get_Config_Int('checklist', 'ratio')
        self.ratiodw_min = self.RwConfig.Get_Config('checklist', 'dw').split('-')[0]
        self.ratiodw_max = self.RwConfig.Get_Config('checklist', 'dw').split('-')[1]
        self.ratiogr_min = self.RwConfig.Get_Config('checklist', 'gr').split('-')[0]
        self.ratiogr_max = self.RwConfig.Get_Config('checklist', 'gr').split('-')[1]
        self.check_base = self.RwConfig.Get_Config_Int('checklist', 'base')
        self.base_min = self.RwConfig.Get_Config('checklist', 'bnum').split('-')[0]
        self.base_max = self.RwConfig.Get_Config('checklist', 'bnum').split('-')[1]
        self.check_buser = self.RwConfig.Get_Config_Int('checklist', 'bankuser')
        self.check_blcy = self.RwConfig.Get_Config_Int('checklist', 'blcy')
        self.check_n1 = self.RwConfig.Get_Config('checklist', 'n1')
        print(self.check_name, self.check_sfz, self.check_ratio, self.check_ratio, self.check_n1, self.cityname,
              self.pa)
        print('check_ratiodw:', self.check_ratio, self.ratiodw_min, self.ratiodw_max)
        print('check_ratiogr:', self.check_ratio, self.ratiogr_min, self.ratiogr_max)
        print('check_base:', self.check_base, self.base_min, self.base_max)
        print(f"{self.cityname} {self.citycode} 校验开始………………………………")

    def create_page(self):
        # 可以放在某个 Frame 或 Toplevel
        # 这里假设你是在某个容器（如 Frame 或 Toplevel）中调用此函数并布局

        self.frame = tk.Frame(self, bg=self.bg_color)
        self.frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True, padx=0, pady=0)

        # 第1行：标题（说明）
        tk.Label(self.frame, text="校验项 ", font=('SimHei', 12, 'bold'), bg=self.bg_color).grid(
            row=0, column=0, columnspan=1, sticky="w", padx=30, pady=(30, 10)
        )
        tk.Label(self.frame, text="说明", font=('SimHei', 12, 'bold'), bg=self.bg_color).grid(
            row=0, column=1, columnspan=1, sticky="w", padx=30, pady=(30, 10)
        )

        # 第2行：sfz

        self.var_sfz = tk.IntVar(value=self.check_sfz)
        print('check_sfz:', self.check_sfz, 'var_sfz:', self.var_sfz)
        tk.Checkbutton(self.frame, text="身份证号", variable=self.var_sfz, bg=self.bg_color).grid(
            row=1, column=0, sticky="w", padx=(20, 10), pady=5)
        self.sfzlabel = tk.Label(self.frame, text="身份证号是否符合校验规则", fg='blue', bg=self.bg_color,
                                 cursor="hand2")
        self.sfzlabel.grid(row=1, column=1, sticky="w", pady=5)

        # 第3行：姓名
        self.var_name = tk.IntVar(value=self.check_name)
        tk.Checkbutton(self.frame, text="姓名", variable=self.var_name, bg=self.bg_color).grid(
            row=2, column=0, sticky="w", padx=(20, 10), pady=5
        )
        tk.Label(self.frame, text="同身份证号码对应姓名必须一致", bg=self.bg_color).grid(row=2, column=1, sticky="w",
                                                                                         pady=5)

        # 第4行：开始年月 截止年月（默认勾选 + 禁止修改）
        self.var_month = tk.IntVar(value=1)  # 默认选中
        self.cb_month = tk.Checkbutton(self.frame, text="开始年月 截止年月", variable=self.var_month, state="disabled",
                                       font=('SimHei', 11, 'bold'), bg=self.bg_color, fg='red')
        self.cb_month.grid(row=3, column=0, sticky="w", padx=(20, 10), pady=5)
        tk.Label(self.frame, text="符合格式[YYYYMM]且时间上不交叉重复", font=('SimHei', 10, 'bold'), bg=self.bg_color,
                 fg='red').grid(row=3, column=1, sticky="w", pady=5)

        # 第5行：数字类型是否有特殊字符（默认勾选 + 禁止修改）

        self.var_数字特殊字符 = tk.IntVar(value=1)  # 默认选中
        self.cb_数字特殊字符 = tk.Checkbutton(self.frame, text="数字项是否有特殊字符", variable=self.var_数字特殊字符,
                                              state="disabled", font=('SimHei', 11, 'bold'), bg=self.bg_color, fg='red')
        self.cb_数字特殊字符.grid(row=4, column=0, sticky="w", padx=(20, 10), pady=5)
        tk.Label(self.frame, text="基数,比例项必须为数字", font=('SimHei', 10, 'bold'), bg=self.bg_color,
                 fg='red').grid(row=4, column=1, sticky="w", pady=5)

        # 第6行：比例校验
        self.var_ratio = tk.IntVar(value=self.check_ratio)
        tk.Checkbutton(self.frame, text="缴费比例", variable=self.var_ratio, bg=self.bg_color).grid(
            row=5, column=0, sticky="w", padx=(20, 10), pady=5)
        tk.Label(self.frame, text="判断比例是否在合理范围内", bg=self.bg_color).grid(
            row=5, column=1, sticky="w", pady=5)
        ratio_frame = tk.Frame(self.frame, bg=self.bg_color)
        ratio_frame.grid(row=6, column=0, columnspan=2, sticky="ew", padx=(50, 5), pady=(0, 0))
        ratio_framedw = tk.Frame(ratio_frame, bg=self.bg_color)
        ratio_framedw.pack()
        tk.Label(ratio_framedw, text="单位缴费比例").pack(side="left", padx=10)
        tk.Label(ratio_framedw, text="最小值：").pack(side="left", padx=10)
        self.Entry_ratiodw_min = tk.Entry(ratio_framedw, width=10)
        self.Entry_ratiodw_min.pack(side="left", padx=10)
        tk.Label(ratio_framedw, text="最大值：").pack(side="left", padx=10)
        self.Entry_ratiodw_max = tk.Entry(ratio_framedw, width=10)
        self.Entry_ratiodw_max.pack(side="left", padx=10)
        ratio_framegr = tk.Frame(ratio_frame, bg=self.bg_color)
        ratio_framegr.pack()
        tk.Label(ratio_framegr, text="个人缴费比例").pack(side="left", padx=10)
        tk.Label(ratio_framegr, text="最小值：").pack(side="left", padx=10)
        self.Entry_ratiogr_min = tk.Entry(ratio_framegr, width=10)
        self.Entry_ratiogr_min.pack(side="left", padx=10)
        tk.Label(ratio_framegr, text="最大值：").pack(side="left", padx=10)
        self.Entry_ratiogr_max = tk.Entry(ratio_framegr, width=10)
        self.Entry_ratiogr_max.pack(side="left", padx=10)

        # 第8行：基数校验
        self.var_base = tk.IntVar(value=self.check_base)
        tk.Checkbutton(self.frame, text="基数校验", variable=self.var_base, bg=self.bg_color).grid(
            row=7, column=0, sticky="w", padx=(20, 10), pady=5)
        tk.Label(self.frame, text="判断基数是否在合理范围内", bg=self.bg_color).grid(row=7, column=1, sticky="w",
                                                                                     pady=5)
        base_frame = tk.Frame(self.frame, bg=self.bg_color)
        base_frame.grid(row=8, column=0, columnspan=2, sticky="ew", padx=(40, 10), pady=(1, 10))
        tk.Label(base_frame, text="缴费基数").pack(side="left", padx=20)
        tk.Label(base_frame, text="最小值：").pack(side="left", padx=10)
        self.Entry_base_min = tk.Entry(base_frame, textvariable=self.base_min, width=10)
        self.Entry_base_min.pack(side="left", padx=10)
        tk.Label(base_frame, text="最大值：").pack(side="left", padx=10)
        self.Entry_base_max = tk.Entry(base_frame, textvariable=self.base_max, width=10)
        self.Entry_base_max.pack(side="left", padx=10)

        # 第10行：银行户名
        self.var_buser = tk.IntVar(value=self.check_buser)
        tk.Checkbutton(self.frame, text="银行户名", variable=self.var_buser, bg=self.bg_color).grid(
            row=9, column=0, sticky="w", padx=(20, 10), pady=5
        )
        tk.Label(self.frame, text="是否同姓名一致", bg=self.bg_color).grid(
            row=9, column=1, sticky="w", pady=5
        )

        # 第11行：同月同单位所有人缴费比例是否相同
        self.var_blcy = tk.IntVar(value=self.check_blcy)
        tk.Checkbutton(self.frame, text="人员缴费比例相同", variable=self.var_blcy, bg=self.bg_color).grid(
            row=10, column=0, sticky="w", padx=(20, 10), pady=5)
        self.blcylabel = tk.Label(self.frame,
                                  text="同月所有人比例相同，异常月份人员明细导出到异常信息表中供查看，\n此不作为错误项,仅给予提示。如需要则查看比例不一致明细核对数据。",
                                  bg=self.bg_color,
                                  justify=tk.LEFT,  # 设置多行文本水平居中
                                  height=2)
        self.blcylabel.grid(row=10, column=1, sticky="w", pady=5)

        self.save_btn = tk.Button(self.frame, text='保存', command=self.on_save_btn)
        self.save_btn.grid(row=12, column=0, sticky="e", padx=(10, 10), pady=5)
        self.reset_btn = tk.Button(self.frame, text='重置', command=self.on_reset_btn)
        self.reset_btn.grid(row=12, column=1, sticky="w", padx=(10, 10), pady=5)
        # 绑定鼠标左键点击事件
        self.sfzlabel.bind("<Button-1>", self.on_sfzlabel_click)

        # 绑定 按键按下事件 "<Key>"，调用 allow_only_num 方法 保证输入的都是正整数
        self.Entry_ratiodw_min.bind("<Key>", self.allow_only_num)
        self.Entry_ratiodw_max.bind("<Key>", self.allow_only_num)
        self.Entry_ratiogr_min.bind("<Key>", self.allow_only_num)
        self.Entry_ratiogr_max.bind("<Key>", self.allow_only_num)
        self.Entry_base_min.bind("<Key>", self.allow_only_num)
        self.Entry_base_max.bind("<Key>", self.allow_only_num)

    def allow_only_num(self, event):
        # 放行功能键：Backspace, Delete, Tab
        if event.keysym in ['BackSpace', 'Delete', 'Tab']:
            return None
        # 如果有字符输入，但不是数字，则拦截
        if event.char and not event.char.isdigit():
            return "break"
        # 其它情况允许输入（比如数字）
        return None

    def show_error(self, title, text):
        pass

    def on_save_btn(self):
        self.check_sfz = self.var_sfz.get()
        self.check_name = self.var_name.get()
        self.check_ratio = self.var_ratio.get()
        self.check_base = self.var_base.get()
        self.check_buser = self.var_buser.get()
        self.check_blcy = self.var_blcy.get()
        # 输入信息获取
        self.ratiodw_min = self.Entry_ratiodw_min.get()
        self.ratiodw_max = self.Entry_ratiodw_max.get()
        self.ratiogr_min = self.Entry_ratiogr_min.get()
        self.ratiogr_max = self.Entry_ratiogr_max.get()
        self.base_min = self.Entry_base_min.get()
        self.base_max = self.Entry_base_max.get()

        if int(self.ratiodw_min) < int(self.ratiodw_max):
            if int(self.ratiodw_max) > 100:
                messagebox.showerror("错误", "单位缴费比例不能大于100%")
                return
        else:
            messagebox.showerror("错误", "单位缴费比例范围错误，最小值应小于最大值")
            return

        if int(self.ratiogr_min) < int(self.ratiogr_max):
            if int(self.ratiogr_max) > 100:
                messagebox.showerror("错误", "单位缴费比例不能大于100%")
                return
        else:
            messagebox.showerror("错误", "个人缴费比例范围错误，最小值应小于最大值")
            return

        if not int(self.base_min) < int(self.base_max):
            messagebox.showerror("错误", "基数范围错误，最小值应小于最大值")
            return
        self.RwConfig.Set_Config('checklist', 'sfz', self.check_sfz)
        self.RwConfig.Set_Config('checklist', 'name', self.check_name)
        self.RwConfig.Set_Config('checklist', 'ratio', self.check_ratio)
        self.RwConfig.Set_Config('checklist', 'base', self.check_base)
        self.RwConfig.Set_Config('checklist', 'bankuser', self.check_buser)
        self.RwConfig.Set_Config('checklist', 'blcy', self.check_blcy)

        self.RwConfig.Set_Config('checklist', 'dw', self.ratiodw_min + '-' + self.ratiodw_max)
        self.RwConfig.Set_Config('checklist', 'gr', self.ratiogr_min + '-' + self.ratiogr_max)
        self.RwConfig.Set_Config('checklist', 'bnum', self.base_min + '-' + self.base_max)

        print(self.check_sfz, self.check_name, self.check_ratio, self.check_base, self.check_buser)
        print(self.ratiodw_min, self.ratiodw_max, self.ratiogr_min, self.ratiogr_max, self.base_min, self.base_max)

    def on_reset_btn(self):
        print('check_ratiodw1r:', self.check_ratio, self.ratiodw_min, self.ratiodw_max)
        print('check_ratiogr1r:', self.check_ratio, self.ratiogr_min, self.ratiogr_max)
        self.get_config()
        self.var_sfz.set(self.check_sfz)
        self.var_name.set(self.check_name)
        # self.var_month.set(self.check_month)
        # self.var_数字特殊字符.set(self.check_数字特殊字符)
        self.var_ratio.set(self.check_ratio)
        self.var_base.set(self.check_base)
        self.var_buser.set(self.check_buser)
        self.var_blcy.set(self.check_blcy)

        print('[ok] 多选框已重置为默认值')

        self.Entry_ratiodw_min.delete(0, tk.END)
        self.Entry_ratiodw_max.delete(0, tk.END)
        self.Entry_ratiogr_min.delete(0, tk.END)
        self.Entry_ratiogr_max.delete(0, tk.END)
        self.Entry_base_min.delete(0, tk.END)
        self.Entry_base_max.delete(0, tk.END)

        print('check_r1:', self.Entry_ratiodw_min.get(), self.Entry_ratiogr_max.get())
        self.Entry_ratiodw_min.insert(0, self.ratiodw_min)
        self.Entry_ratiodw_max.insert(0, self.ratiodw_max)
        self.Entry_ratiogr_min.insert(0, self.ratiogr_min)
        self.Entry_ratiogr_max.insert(0, self.ratiogr_max)
        self.Entry_base_min.insert(0, self.base_min)
        self.Entry_base_max.insert(0, self.base_max)
        print('check_ratiodw2r:', self.check_ratio, self.ratiodw_min, self.ratiodw_max)
        print('check_ratiogr2r:', self.check_ratio, self.ratiogr_min, self.ratiogr_max)

        print('check_r2:', self.Entry_ratiodw_min.get(), self.Entry_ratiogr_max.get())

    def on_sfzlabel_click(self, event):
        # 当用户点击这个 Label 时，改变它的背景颜色
        self.sfzlabel.configure(bg="yellow")  # 改为黄色
        print("Label 被点击了，背景已变黄")
        sfm_explain = """
    第二代居民身份证的编码规则遵循国家标准，并具有特定的结构和含义。下面是详细的编码规则解析：
一、地址码（前6位）
前1、2位数字表示所在省份的代码。
第3、4位数字表示所在城市的代码。
第5、6位数字表示所在区县的代码。
二、出生日期码（第7-14位）
这部分由8位数字组成，表示个人的出生年、月、日。其中，年份使用4位数表示。
三、顺序码（第15-17位）
第15、16位数字表示所在地的派出所的代码。
第17位数字表示性别，奇数代表男性，偶数代表女性。
四、校验码（第18位）
这是最后一位数字，用于检验身份证的正确性。它可以是0-9中的任何一个数字，或者是罗马数字符X。校验码是根据前17位数字，按照特定的算法计算得出的。
综上所述，第二代居民身份证的编码规则包含了地址、出生日期、顺序和校验四个主要部分，每个部分都有其特定的含义和编码方式。这种设计不仅保证了身份证号码的唯一性，也方便了信息的识别和管理。
    """
        # print(sfm_explain)
        messagebox.showinfo('身份证规则', sfm_explain)


class IdVerification(tk.Frame):
    def __init__(self, root):
        super().__init__(root)
        # 设置全局背景色为白色（可选，如果用了多个 Frame 可再统一设置）
        self.bg_color = 'lightblue'
        # 布局窗口
        self.create_page()

    def create_page(self):
        self.frame = tk.Frame(self, bg=self.bg_color)
        self.frame.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)

        # 第1行：标题（说明）—— 居中或左对齐，加间距
        tk.Label(
            self.frame,
            text="请输入身份证号码",
            font=('SimHei', 12, 'bold'),
            bg=self.bg_color
        ).pack(side=tk.TOP, pady=(20, 10))  # 标题下方加 20 像素间距

        # 第2行：身份证输入框
        self.id_Entry = tk.Entry(
            self.frame,
            font=('SimHei', 12),
            bg=self.bg_color,
            width=20  # 可选：设置输入框宽度（字符数）
        )
        self.id_Entry.pack(side=tk.TOP, padx=20, pady=(10, 10))  # 输入框下方加 15 像素间距

        # 第3行：校验按钮
        self.check_btn = tk.Button(
            self.frame,
            text='校验身份证号码',
            command=self.on_valid_id_btn,
            font=('SimHei', 12),
            bg='#4CAF50',  # 按钮背景色（绿色，可选美化）
            fg='white',  # 文字颜色
            relief=tk.FLAT  # 按钮样式（可选）
        )
        self.check_btn.pack(side=tk.TOP, pady=(10, 10))  # 按钮下方加 20 像素间距

        # 第4行：校验结果提示 Label（自动换行）
        self.label = tk.Label(
            self.frame,
            text='', height=12,
            font=('SimHei', 11),
            bg=self.bg_color,
            justify='left',
            wraplength=350  # 超出 350 像素就自动换行，避免溢出
        )
        self.label.pack(side=tk.TOP, fill=tk.Y, expand=True, padx=(60, 0), pady=(0, 0))  # 最后一个控件也可以适当加间距

    def on_valid_id_btn(self):
        self.label.config(text='')
        id = self.id_Entry.get()
        if len(id) != 18:
            self.label.config(text='请输入18位的身份证号码')
            return
        pattern = r'^\d{17}[\dXx]$'
        # print(re.match(pattern, id))
        if re.match(pattern, id) is None:
            self.label.config(text='身份证号错误! 含有非法字符')
            return
        res_text = self.is_valid_id(id)

        label_text = f"""1. 所在省份的代码:{id[0:2]}。
2. 所在城市的代码:{id[2:4]}。
3. 所在区县的代码:{id[4:6]}。
4. 出生日期：{id[6:10]}年{id[10:12]}月{id[12:14]}日。
5. 顺序号:{id[14:17]}。
6. 性别:{'女' if int(id[16:17]) % 2 == 0 else '男'}，第17位奇数男,偶数女。
7. 校检码:{id[-1:]}。"""
        res_text = res_text + '\n解析：\n' + label_text

        self.label.config(text=res_text)

    def is_valid_id(self, id_number):
        import re
        # 检查身份证号是否为18位且仅包含数字及最后一位可能为字母X
        if len(id_number) != 18:
            return "身份证号错误! 不是18位身份证号码"
        else:

            pattern = r'^\d{17}[\dXx]$'
            # print(re.match(pattern, id_number))
            if re.match(pattern, id_number) is None:
                return "身份证号错误! 含有非法字符"
            if self.is_valid_date8(id_number[6:14]) is False:
                return "身份证号错误! 出生日期为无效时间。"
            # 十七位数字本体码权重
            weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
            # mod11, 对应校验码字符值
            validate = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
            sum = 0
            num = 0
            for sfz in id_number[0:-1]:
                sum = sum + int(sfz) * weight[num]
                num = num + 1
            model = sum % len(validate)

            if validate[model] == id_number[-1:]:
                return "身份证号正确"  #
                # print("身份证号正确")
            else:
                return f"身份证号错误!  校验码应该为【{validate[model]}】"
                # print("身份证号错误")

    # 定义日期格式验证函数
    def is_valid_date8(self, date_string):
        # print(date_string)
        # 本次校验都是8位数据
        if len(date_string) != 8:
            # print(f'【{date_string}】日期字符不是日期格式')
            return False
        formats = ["%Y%m%d"]
        for fmt in formats:
            try:
                d = datetime.strptime(date_string, fmt)
                # print(d)
                return True
            except ValueError:
                continue
        return False


class about:
    def open_about(self, about_window):
        # 标题：软件名称（大字体居中，突出）
        标题标签 = tk.Label(
            about_window,
            text="🔧 一个小工具",
            font=("微软雅黑", 16, "bold"),
            bg="#f4f4f4",
            fg="#2c3e50"
        )
        标题标签.pack(pady=(10, 5))

        # 版本信息
        configname = 'config/config.ini'
        resetini = RwConfig(configname)
        version = resetini.Get_Config('工具', 'soft')
        版本标签 = tk.Label(
            about_window,
            text="Version: "+version[10:],
            font=("微软雅黑", 12),
            bg="#f4f4f4",
            fg="#7f8c8d"
        )
        版本标签.pack(pady=5)

        # 分隔线
        分隔线1 = ttk.Separator(about_window, orient='horizontal')
        分隔线1.pack(pady=5, fill='x')

        # 功能简介标题
        功能标题 = tk.Label(
            about_window,
            text="📋 功能简介",
            font=("微软雅黑", 14, "bold"),
            bg="#f4f4f4",
            fg="#2c3e50"
        )
        功能标题.pack(pady=(5, 5))

        # 功能简介内容
        功能内容 = tk.Label(
            about_window,
            text="本软件是一款轻量级工具，旨在帮助用户快速完成日常任务，\n如数据校验、异常数据生成execl、汇总数据生成execl、等。\n界面简洁，操作便捷，适合个人使用。",
            font=("微软雅黑", 11),
            bg="#f4f4f4",
            fg="#34495e",
            justify="left"
        )
        功能内容.pack(pady=5)

        # 分隔线
        分隔线2 = ttk.Separator(about_window, orient='horizontal')
        分隔线2.pack(pady=5, fill='x')

        # 作者信息标题
        作者标题 = tk.Label(
            about_window,
            text="👤 作者",
            font=("微软雅黑", 14, "bold"),
            bg="#f4f4f4",
            fg="#2c3e50"
        )
        作者标题.pack(pady=(5, 5))

        # 作者信息内容
        作者内容 = tk.Label(
            about_window,
            text="作者：孟庆宇\t\t\n邮箱：yolig@163.com\t VX：yoligg",
            font=("微软雅黑", 11),
            bg="#f4f4f4",
            fg="#34495e"
        )
        作者内容.pack(pady=5)

        # 分隔线
        分隔线3 = ttk.Separator(about_window, orient='horizontal')
        分隔线3.pack(pady=5, fill='x')

        # 感谢信息标题
        感谢标题 = tk.Label(
            about_window,
            text="🙏 感谢",
            font=("微软雅黑", 14, "bold"),
            bg="#f4f4f4",
            fg="#2c3e50"
        )
        感谢标题.pack(pady=(5, 5))

        # 感谢内容
        感谢内容 = tk.Label(
            about_window,
            text="感谢您使用本软件！\n您的支持是我们不断改进的动力。\n如有问题或建议，欢迎联系作者。",
            font=("微软雅黑", 11),
            bg="#f4f4f4",
            fg="#7f8c8d",
            justify="left"
        )
        感谢内容.pack(pady=5)

        # 关闭按钮
        关闭按钮 = tk.Button(
            about_window,
            text="确定",
            command=about_window.destroy,
            font=("微软雅黑", 12),
            bg="#3498db",
            fg="white",
            relief="flat",
            padx=10,
            pady=5
        )
        关闭按钮.pack(pady=10)
# if __name__ == '__main__':
#     # 创建主窗口并运行
#     root = tk.Tk()
#     app = setingPage(root)
#     root.mainloop()
